﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using _1.Presentacion.Utilidades;
using _2.Logica.Seguirdad;
using _4.Modelado.Seguridad;
using _1.Presentacion.Principal;
using _1.Presentacion.Utilidades;

namespace _1.Presentacion.Modulo_Seguridad
{
    public partial class Gestionar_Usuarios : Päntalla_Base
    {
        public Gestionar_Usuarios()
        {
            InitializeComponent();
        }
     

        #region Cargar Datos
        public void CargaGridUsuarios()
        {
            try
            {
                var logica = new UsuarioL();

                List<Usuario> listaUsuarios = logica.ConsultarUsuarios();
                //Recorre la lista de Usuarios para asignar a cada celda del Datagrid
                //Los valores devueltos por la consulta
                dgvUsuarios.Rows.Clear();
                for (int i = 0; i < listaUsuarios.Count; i++)
                {
                    string sNombreCompleto = listaUsuarios[i].sUsNombre + " " + listaUsuarios[i].sUsPrimerApellido + " " +
                    listaUsuarios[i].sUsSegundoApellido;

                    dgvUsuarios.Rows.Add();
                    dgvUsuarios.Rows[i].Cells[0].Value = listaUsuarios[i].iPK_Usuario;
                    dgvUsuarios.Rows[i].Cells[1].Value = sNombreCompleto;
                    dgvUsuarios.Rows[i].Cells[2].Value = listaUsuarios[i].icodPerfil;
                    dgvUsuarios.Rows[i].Cells[3].Value = listaUsuarios[i].sPerfil;
                    dgvUsuarios.Rows[i].Cells[4].Value = listaUsuarios[i].icodArea;
                    dgvUsuarios.Rows[i].Cells[5].Value = listaUsuarios[i].sArea;
                    dgvUsuarios.Rows[i].Cells[6].Value = listaUsuarios[i].sUsNombre;
                    dgvUsuarios.Rows[i].Cells[7].Value = listaUsuarios[i].sUsPrimerApellido;
                    dgvUsuarios.Rows[i].Cells[8].Value = listaUsuarios[i].sUsSegundoApellido;
                    dgvUsuarios.Rows[i].Cells[9].Value = listaUsuarios[i].sUsCorreo;
                    dgvUsuarios.Rows[i].Cells[10].Value = listaUsuarios[i].sUsTelefono;
                    dgvUsuarios.Rows[i].Cells[11].Value = listaUsuarios[i].sUsLogin;
                    dgvUsuarios.Rows[i].Cells[12].Value = listaUsuarios[i].sUsContrasena;
                    dgvUsuarios.Rows[i].Cells[13].Value = listaUsuarios[i].bUsBloqueado;

                }

            }
            catch (Exception exc)
            {

                MessageBox.Show("Eror al cargar la lista de Usuarios " + exc, "Error", MessageBoxButtons.OK);
            }
        }

        public void CargarComboAreas()
        {
            try
            {
                var logica = new AreaL();
                cbArea.DataSource = logica.LlenarComboArea();
                cbArea.ValueMember = "PKArea";
                cbArea.DisplayMember = "AreaDescripcion";


            }
            catch (Exception exc)
            {

                MessageBox.Show(" No se pudo cargar el combo de áreas" + exc.Message, "Error", MessageBoxButtons.OK);
            }

        }
        public void CargarComboPerfiles()
        {
            try
            {
                var logica = new PerfilL();
                cbPerfil.DataSource = logica.LlenarPerfiles();
                cbPerfil.ValueMember = "PK_Perfil";
                cbPerfil.DisplayMember = "PerfilNombre";


            }
            catch (Exception exc)
            {

                MessageBox.Show(" No se pudo cargar el combo de áreas" + exc.Message, "Error", MessageBoxButtons.OK);
            }

        }

        #endregion


        private void Gestionar_Usuarios_Load(object sender, EventArgs e)
        {
            CargaGridUsuarios();
            Validaciones.CargarUsuarioLogueado(lbl_Usuario,lbl_Fecha);
            CargarComboAreas();
            CargarComboPerfiles();
            txt_PKUsuario.Text = "0";
            
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            bool flag= false;
            try
                
            {
                
                int cantErrores = 0;
              
                Validaciones.Validar(this, errorProvider1, ref cantErrores);

              if (cantErrores == 0)
              {
                  #region Guardar Usuario
                  if (txtPassword.Text == txtConfirmarPass.Text)
                  {
                      var obj = new Usuario();
                      obj.iPK_Usuario = Convert.ToInt32(txt_PKUsuario.Text);
                      obj.sUsNombre = txtNombre.Text;
                      obj.sUsPrimerApellido = txtPrimApellido.Text;
                      obj.sUsSegundoApellido = txtSegApellido.Text;
                      obj.sUsCorreo = txtCorreoIgnore.Text;
                      obj.sUsTelefono = mktTelefonoIgnore.Text;
                      obj.sUsLogin = txtLogin.Text;
                      obj.sUsContrasena = txtPassword.Text;
                      obj.icodArea = Convert.ToInt32(cbArea.SelectedValue);
                      obj.icodPerfil = Convert.ToInt32(cbPerfil.SelectedValue);
                      obj.bUsBloqueado = chb_Estado.Checked;
                      
                      var logica = new UsuarioL();
                      logica.GuardarUsuario(obj);
                      CargaGridUsuarios();
                    
                  }
                  else
                  { MessageBox.Show("Las contraseñas deben coincidir", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                    
                    #endregion
                }

            }
            catch (Exception exc)
            {

                MessageBox.Show("Se produjo un error al guardar los datos" + exc, "Error", MessageBoxButtons.OK); 
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            
            Validaciones.LimpiarControles(gb_Usaurios);
            txt_PKUsuario.Text = "0";

        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
          try
            {
                if (dgvUsuarios.RowCount > 0)
                {
                    int indiceFila = dgvUsuarios.SelectedCells[0].RowIndex;
                    string sDescripcion = dgvUsuarios[1, indiceFila].Value.ToString();
                    

                    #region Elimina Usuario

                    DialogResult r = MessageBox.Show("Desea eliminar el usuario: " + sDescripcion, "Validaciones",
                                                     MessageBoxButtons.OKCancel,MessageBoxIcon.Question);

                    if (r == DialogResult.OK)
                    {
                        var obj = new Usuario();
                        obj.iPK_Usuario = Convert.ToInt32(dgvUsuarios.Rows[indiceFila].Cells[0].Value);

                        var logica = new UsuarioL();
                        logica.EliminarUsuario(obj);
                        CargaGridUsuarios();
                        Validaciones.LimpiarControles(gb_Usaurios);
     
                    }

                    #endregion
                }
            }
            catch (Exception exc)
            {

                MessageBox.Show("No se pudo eliminar el registro " + exc, "Error", MessageBoxButtons.OKCancel);
            }
        }

   

        private void btn_cambiarPass_Click(object sender, EventArgs e)
        {
            txtConfirmarPass.Clear();
            txtConfirmarPass.ReadOnly = false;

        }

        private void dgvUsuarios_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (dgvUsuarios.RowCount > 0)
                {


                    #region Cargar Datos Usuario

                    int indiceFila = dgvUsuarios.SelectedCells[0].RowIndex;
                    string sDescripcion = dgvUsuarios[1, indiceFila].Value.ToString();

                    txt_PKUsuario.Text = dgvUsuarios[0, indiceFila].Value.ToString();
                    txtNombre.Text = dgvUsuarios[6, indiceFila].Value.ToString();
                    txtPrimApellido.Text = dgvUsuarios[7, indiceFila].Value.ToString();
                    txtSegApellido.Text = dgvUsuarios[8, indiceFila].Value.ToString();
                    txtCorreoIgnore.Text = dgvUsuarios[9, indiceFila].Value.ToString();
                    mktTelefonoIgnore.Text = dgvUsuarios[10, indiceFila].Value.ToString();
                    txtLogin.Text = dgvUsuarios[11, indiceFila].Value.ToString();
                    txtPassword.Text = dgvUsuarios[12, indiceFila].Value.ToString();
                    cbArea.SelectedValue = dgvUsuarios[4, indiceFila].Value.ToString();
                    cbPerfil.SelectedValue = dgvUsuarios[2, indiceFila].Value.ToString();
                    chb_Estado.Checked = Convert.ToBoolean(dgvUsuarios[13, indiceFila].Value);



                    #endregion

                    txtConfirmarPass.Text = txtPassword.Text;
                    txtConfirmarPass.ReadOnly = true;
                    btn_cambiarPass.Enabled = true;

                }
            }
            catch (Exception exc)
            {

                MessageBox.Show("Error al cargarse los datos " + exc, "Error", MessageBoxButtons.OKCancel);
            }

        }

        private void btnHom_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }


       
    }
}
